package com.example.util;

import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.Collection;

/**
 *
 * Assert类,（跟Junit断言似）
 * 主要作用是在方法或者任何地方对参数做校验(减少if的使用)。当不满足断言条件时，会抛出IllegalArgumentException、IllegalStateException、自定义异常等。
 *
 * @see org.springframework.util.Assert
 * @author aopmin
 * @since 2025/4/15
 */
public abstract class Assert {

    private Assert() {
        throw new IllegalStateException("抽象类禁止实例化");
    }

    /**
     * 对象非空校验
     * @param object 对象
     * @param message 错误信息
     */
    public static void notNull(Object object, String message) {
        if (object == null) {
            throw new IllegalArgumentException(message);// 后期可以优化成自定义异常 然后用全局异常处理器拦截
        }
    }

    /**
     * 对象为空校验
     * @param object
     * @param message
     */
    public static void isNull(Object object, String message) {
        if (object != null) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     *  字符串非空判断
     * @param str 对象
     * @param message 错误信息
     */
    public static void notBlank(String str, String message) {
        if (!StringUtils.hasLength(str)) {
            //StringUtils.hasLength(str) 判断是否有值
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 是否为true
     * @param expression boolean表达式
     * @param message 错误信息
     */
    public static void isTrue(boolean expression, String message) {
        if (!expression) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 集合非空校验
     * @param collection 集合
     * @param message 错误信息
     */
    public static void notEmpty(Collection<?> collection, String message) {
        if (CollectionUtils.isEmpty(collection)) {
            throw new IllegalArgumentException(message);
        }
    }

}